package cars;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class RentMgrSys {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        ArrayList<Users> users = new ArrayList<>();
        //创建用户集合
        ArrayList<Vehicle>list = new ArrayList<>();
        //创建汽车集合
        BufferIn(list, users);
        //读取文件中已经存取的汽车和用户数据并分别放于两个集合中
//        System.out.println(users);
//        System.out.println(list);
        while (true) {
            System.out.println("1.登录 2.退出");
            System.out.print("请选择：");
            String chooseCase1 = sc.next();
            //选择登录或者退出系统
            switch (chooseCase1) {
                case "1":
                    //当选择1的时候，进行登录操作
                    de:
                    while (true) {
                        System.out.print("请输入用户名:");
                        String UserID = sc.next();
                        //输入用户名
                        System.out.print("请输入用户密码:");
                        String UserPwd = sc.next();
                        //输入密码
                        for (Users user : users) {
                            //对从文件中读取的用户信息进行循环遍历
                            if (user.getUserID().equals(UserID) && user.getUserPWD().equals(UserPwd)) {
                                //当找到与用户输入的用户名和对应的密码一致时，进行用户端的操作
                                user.authority(list, users);
                                //进行用户端的操作
                                break de;
                                //跳出while无限输入循环
                            }
                        }
                        System.out.println("登陆失败，请重新输入!!");
                        //当遍历完用户的时候，未找到与该用户输入的账号和密码，则提示登录错误，重新输入
                    }
                    break;
                case "2":
                    return;
                    //退出系统
                default:
                    System.out.println("没有该选项，请重新输入");
                    //输入其他的选项的时候，提示无该选项
                    break;
            }
        }
    }

    public static void BufferIn(ArrayList<Vehicle>list,ArrayList<Users> users) throws IOException {
        //读取文件中的数据的操作
        BufferedReader car = new BufferedReader(new FileReader("AllCars"));
        //用BufferedReader进行读取car
        BufferedReader user = new BufferedReader(new FileReader("AllUsers"));
        //用BufferedReader进行读取user
        String CarStr;
        String UserStr;
        while ((CarStr = car.readLine()) != null) {
            //一行一行的读取循环操作
            String[] arr = CarStr.split(" ");
            //用空格分离汽车的各种信息
            String type = arr[0];//类型
            String brand = arr[1];//品牌
            String model = arr[2];//名字
            String VehicleID = arr[3];//车牌号
            double PerRent = 0;
            try {
                PerRent = Double.parseDouble(arr[4]);//读取日租金，当不为数字的时候，提示！
            } catch (NumberFormatException e) {
                System.out.println("文件中数字格式异常，请检查！！！");
                System.exit(1);
                //非正常退出系统
            }
            if (type.equals("轿车")){
                //当类型为轿车时，list集合加入轿车类型
                list.add(new Car(type,brand,model,VehicleID,PerRent));
            }else if (type.equals("客车")){
                //当类型为客车时，list集合加入客车类型
                list.add(new Bus(type,brand,Integer.parseInt(model),VehicleID,PerRent));
            } else if (type.equals("卡车")) {
                //当类型为卡车时，list集合加入卡车类型
                list.add(new Trunk(type,brand,Integer.parseInt(model),VehicleID,PerRent));
            }else {
                //不是汽车，客车，卡车中的一种，提示无该种类的车
                System.out.println("无该类型的车");
                System.exit(1);
                //非正常退出虚拟机
            }
        }
        car.close();
        //进行关闭资源
        while ((UserStr = user.readLine()) != null) {
            //对用户信息读取
            String[] arr = UserStr.split("-");
            //用-符分开
            String UserID = arr[0];
            //账号
            String UserPWD = arr[1];
            //密码
            String UserName = arr[2];
            //用户身份
            if (arr.length == 7) {
                //当获得用户信息以-为分割的数组长度为7时，代表该用户为顾客用户
                String VIP = arr[3];//身份
                double money = Double.parseDouble(arr[4]);//目前拥有的钱
                String car1 = arr[5];//目前所租的车
                int day = Integer.parseInt(arr[6]);//租车天数
                if (car1.equals("null")) {
                    //当未租车时，将car设为null即可
                    users.add(new Customers(UserID, UserPWD, UserName, money, VIP, null, day));
                } else {
                    //已有车，将车的信息以空格符分割加入user集合
                    String[] arr1 = car1.split(" ");
                    if (arr1[0].equals("轿车")){
                        users.add(new Customers(UserID, UserPWD, UserName, money, VIP, new Car(arr1[0], arr1[1], arr1[2], arr1[3],Double.parseDouble(arr1[4])), day));
                    }
                    else if (arr1[0].equals("客车")){
                        users.add(new Customers(UserID, UserPWD, UserName, money, VIP,new Bus(arr1[0],arr1[1],Integer.parseInt(arr1[2]),arr1[3],Double.parseDouble(arr1[4])),day));
                    }else {
                        users.add(new Customers(UserID, UserPWD, UserName, money, VIP,new Trunk(arr1[0],arr1[1],Integer.parseInt(arr1[2]),arr1[3],Double.parseDouble(arr1[4])),day));
                    }
                }
            } else {
                //为管理员时，直接加入账号，密码，身份
                users.add(new Administrators(UserID, UserPWD, UserName));
            }
        }
        user.close();
        //关闭资源
    }
}
